import axios from 'axios'
import { BASE_URL } from './config'
import JSONBIG from 'json-bigint'
import {message as messageFn} from 'antd'
// import { hasToken, getToken, removeToken } from '../router/token'
import history from './history'
// 配置axios
// 1. 配置axios的基础地址
axios.defaults.baseURL = BASE_URL

axios.defaults.transformResponse = [
  function(data) {
    const json = JSONBIG({
      storeAsString: true
    })
    const res = json.parse(data)
    return res
  }
]

// 2. 配置axios的请求拦截器
axios.interceptors.request.use(
  function (config) {

    const token =  window.location.href.indexOf('/prd') === -1 ?localStorage.getItem('token-llx-test'):localStorage.getItem('token-llx')
    // 如果本地有token, 就带着
    if (token) {
      config.headers.Authorization = 'Bearer ' + token
    }
    return config
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)

// 3. 配置axios的响应拦截器
axios.interceptors.response.use(
  function (response) {

    const { message, success,accessKeyId } = response.data
    if (!success&&!accessKeyId) {
      // 统一给错误提示
      messageFn.error(message)
      return Promise.reject(message)
    }
    return response.data
  },
  function (error) {
      // 对响应错误做点什么
      if(!error.response) {
       return error
      }
    if (error.response.status === 401 && error.response.data.code === 401) {
      // token过期失效， 需要清除token，清除个人信息，回到登录页
 
      messageFn.error('亲！请重新登录！,正在前往登录页')

      const baseUrl = window.location.href.indexOf('/prd')
      baseUrl === -1 ?localStorage.removeItem('token-llx-test'):localStorage.removeItem('token-llx')
      baseUrl === -1 ?localStorage.removeItem('persist:root'):localStorage.removeItem('persist:rootPublish')

    // 如果本地有token, 就带着

      history.replace('/login')

      setTimeout(()=>{
        window.location.reload()

      },2000)
        

    }
    if (error.response.status === 500 || error.response.status === 503) {
        messageFn.error('服务器错误，请重试')}
    return Promise.reject(error)
  }
)

// react中, 思想, 要用, 就导入
// 将来: 这边配置完了axios后, 代码中, 就导入这个配置过的axios即可
export default axios
